/***********************************************************************
 * Module:  Ressources.java
 * Author:  Fabien Muguet
 * Purpose: Defines the Class Ressources
 ***********************************************************************/

package modele;

import controleur.CCLogger;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Vector;
import java.util.logging.Level;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import main.Outils;
import org.jdom.JDOMException;

public class Ressources {

   private Vector<Color> couleurs = new Vector<Color>();
   private Vector<Font> polices = new Vector<Font>();
   private Vector<Image> imagesDeFond = new Vector<Image>();
   private Vector<ModeleCarte> modeles = new Vector<ModeleCarte>();

   private CartePostale cartePostale;
   private Vector<Image> imagesImportees = new Vector<Image>();
   private ImageSurZone imageSurZone;

   private BufferedImage pictoImage;
   private BufferedImage pictoSupprimer;

     
   /**
    * A la construction, on va charger toutes les ressources paramétrées.
    */
   public Ressources() {

       initCouleurs();
       initFonds();
       initModeles();
       initPolices();

       // On récupère les pictogrammes de l'application
       try {
            pictoImage = ImageIO.read( getClass().getResource("/vue/images/pictoimage.png") );
            pictoSupprimer = ImageIO.read( getClass().getResource("/vue/images/pictosupprimer.png") );
       }
       catch(Exception ex) {
           System.out.println("[ERREUR] Impossible de trouver tous les pictogrammes.");
       }
   }


   /**
    * Initialise les ressources utiles de l'application.
    */
   public void initialiser() {

       // Nouvelle carte postale
       cartePostale = new CartePostale(null);

       // Suppression des images importées
       supprimerImagesImportees();
       
       // Informations du drag and drop
       imageSurZone = null;
   }

   /**
    * Initialise la liste des modèles à partir du fichier de configuration.
    */
   public void initModeles() {
      try {
            modeles = Chargeur.recupereModeles();
        } catch (JDOMException ex) {
            CCLogger.Write(Level.SEVERE, Outils.getStackTrace(ex));
            JOptionPane.showMessageDialog(null, "Une erreur est lors de la récupération des modèles. " +
                    "Vérfier le fichier de configuration des modèles.");
        } catch (IOException ex) {
            CCLogger.Write(Level.SEVERE, Outils.getStackTrace(ex));
            JOptionPane.showMessageDialog(null, "Impossible d'ouvrir le fichier de configurations des modèles.");
        }
   }

   /**
    * Initialise la liste des couleurs à partir du fichier de configuration.
    */
   public void initCouleurs() {
        try {
            couleurs = Chargeur.recupereCouleurs();
        } catch (JDOMException ex) {
            CCLogger.Write(Level.SEVERE, Outils.getStackTrace(ex));
            JOptionPane.showMessageDialog(null, "Une erreur est lors de la récupération des couleurs. " +
                    "Vérfier le fichier de configuration des couleurs.");
        } catch (IOException ex) {
            CCLogger.Write(Level.SEVERE, Outils.getStackTrace(ex));
            JOptionPane.showMessageDialog(null, "Impossible d'ouvrir le fichier de configurations des couleurs.");
        }
   }

   /**
    * Initialise la liste des modèles à partir des éléments du dossier images.
    */
   public void initFonds(){
        try {
            imagesDeFond = Chargeur.recupereImages();
        } catch (Exception ex) {
            CCLogger.Write(Level.SEVERE, Outils.getStackTrace(ex));
            JOptionPane.showMessageDialog(null, "Erreur lors de la récupération des images.");
        }
   }

   /**
    * Initialise la liste des polices à partir des éléments du dossier polices.
    */
   public void initPolices() {
      try {   
         polices = Chargeur.recuperePolices();

      }catch (IOException ex) {
          CCLogger.Write(Level.SEVERE, Outils.getStackTrace(ex));
          JOptionPane.showMessageDialog(null, "Erreur lors de la récupération des polices.");
      }
      catch (FontFormatException ex) {
          CCLogger.Write(Level.SEVERE, Outils.getStackTrace(ex));
          JOptionPane.showMessageDialog(null, "Erreur lors de la récupération des polices.");
      }
   }


   
   public void chargerFondsPrecedent() {
      // TODO: implement
   }
   
   public void chargerFondsSuivant() {
      // TODO: implement
   }



   public void ajouterImageImportee(Image image) {

   }

   public void supprimerImagesImportees() {
       imagesImportees.clear();
   }

    public CartePostale getCartePostale() {
        return cartePostale;
    }

    public void setCartePostale(CartePostale cartePostale) {
        this.cartePostale = cartePostale;
    }

    public Vector<Color> getCouleurs() {
        return couleurs;
    }

    public void setCouleurs(Vector<Color> couleurs) {
        this.couleurs = couleurs;
    }

    public Vector<modele.Image> getImagesDeFond() {
        return imagesDeFond;
    }

    public void setImagesDeFond(Vector<modele.Image> imagesDeFond) {
        this.imagesDeFond = imagesDeFond;
    }

    public Vector<modele.Image> getImagesImportees() {
        return imagesImportees;
    }

    public void setImagesImportees(Vector<modele.Image> imagesImportees) {
        this.imagesImportees = imagesImportees;
    }

    public Vector<ModeleCarte> getModeles() {
        return modeles;
    }

    public void setModeles(Vector<ModeleCarte> modeles) {
        this.modeles = modeles;
    }

    public BufferedImage getPictoImage() {
        return pictoImage;
    }

    public void setPictoImage(BufferedImage pictoImage) {
        this.pictoImage = pictoImage;
    }

    public BufferedImage getPictoSupprimer() {
        return pictoSupprimer;
    }

    public void setPictoSupprimer(BufferedImage pictoSupprimer) {
        this.pictoSupprimer = pictoSupprimer;
    }

    public Vector<Font> getPolices() {
        return polices;
    }

    public void setPolices(Vector<Font> polices) {
        this.polices = polices;
    }

    public ImageSurZone getImageSurZone() {
        return imageSurZone;
    }

    public void setImageSurZone(ImageSurZone imageSurZone) {
        this.imageSurZone = imageSurZone;
    }



}
